💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    2 02 Reverse URL | ✅저자: 이유정(박사)

    🔹 Reverse URL (역참조)란? URL 역참조는 path() 함수에서 name으로 지정한 URL 이름을 사용하여,
    실제 경로를 자동으로 생성하는 기능입니다.

    즉, 주소(/polls/)를 코드에 직접 쓰지 않고, URL 이름(name)으로 대신 사용하는 방식입니다.

    ❓ 왜 역참조(reverse URL)가 필요할까?

    <!-- ❌ 안 좋은 예 -->
    <a href="/polls/">투표하기</a>
    
    • URL이 바뀌면 모든 코드에서 일일이 수정해야 함
    • 유지보수가 매우 어렵고, 실수 가능성 높음

    name='index' 추가

    # polls/urls.py
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.index, name='index'),  
        # ⭕ 템플릿에서 {% url 'index' %}로 사용 가능
    ]
    

    ✅ 그래서 URL 이름(name)을 사용해 다음과 같이 작성합니다:

    <!-- ⭕ 좋은 예 -->
    <a href="{% url 'index' %}">투표하기</a>
    
    • name='index'로 지정된 URL 경로를 자동으로 찾아 연결해줌
    • URL이 바뀌어도 이 부분은 자동으로 반영됨

    🔹 reverse() 함수 (파이썬 코드 안에서 사용) HTML 템플릿이 아닌, Python 코드 안에서 URL을 만들고 싶을 때는 reverse() 함수를 사용합니다.

    from django.urls import reverse
    
    url = reverse('index')
    print(url)  # 출력: /polls/
    

    🔄 정리: url 태그 vs reverse() 함수
    사용 위치 사용법 예시
    템플릿(HTML) {% url 'name' %} <a href="{% url 'index' %}">
    Python 코드 reverse('name') url = reverse('index')

    ✨ 한 줄 요약:

    • Reverse URL은 URL 경로를 직접 쓰지 않고 이름으로 참조하는 방법입니다.
    • 유지보수가 쉽고, URL이 바뀌어도 자동 반영되어 실수를 줄일 수 있습니다.

    1️⃣ models.py – Post 모델 정의

    from django.db import models
    
    class Post(models.Model):
        title = models.CharField(max_length=100)
        content = models.TextField()
    
        def __str__(self):
            return self.title
    

    2️⃣ views.py – 상세 페이지 뷰 정의

    from django.shortcuts import render, get_object_or_404
    from .models import Post
    
    def post_detail(request, id):
        post = get_object_or_404(Post, pk=id)
        return render(request, 'post_detail.html', {'post': post})
    

    get_object_or_404()Post.objects.get(pk=id)보다 안전하게 처리함
    글이 없으면 404 페이지로 자동 응답

    3️⃣ urls.py – URL 연결

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('post/<int:id>/', views.post_detail, name='post-detail'),
    ]
    

    4️⃣ post_detail.html – 템플릿 작성

    <!-- templates/post_detail.html -->
    <!DOCTYPE html>
    <html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>{{ post.title }}</title>
    </head>
    <body>
        <h1>{{ post.title }}</h1>
        <p>{{ post.content }}</p>
    </body>
    </html>
    
    템플릿 경로는 settings.py의 DIRS 설정에 맞춰 templates/ 폴더 안에 
    둡니다.
    

    5️⃣ settings.py – 템플릿 설정 확인

    'DIRS': [BASE_DIR / 'templates'],
    

    6️⃣ 테스트 데이터 생성 (Django Shell)

    python manage.py shell
    
    from import_test.models import Post
    Post.objects.create(title="첫 번째 글", content="장고 테스트 게시물입니다.")
    

    서버 실행

    python manage.py runserver
    

    브라우저 접속

    http://localhost:8000/post/1/
    

    화면출력

    제목: 첫 번째 글  
    내용: 장고 테스트 게시물입니다.
    
    TOP
    preload preload